package com.bestcem.xm.user.util.convert;

import com.bestcem.xm.user.controller.vo.group.*;
import com.bestcem.xm.user.controller.vo.group.request.UserGroupCreateVO;
import com.bestcem.xm.user.entity.mysql.UserGroup;
import com.bestcem.xm.user.entity.pojo.UserGroupDO;
import com.bestcem.xm.user.service.dto.group.*;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

import java.util.List;

/**
 * 用户组对象拷贝
 *
 * @author qiongyu.cui <qiongyu.cui@idiaoyan.com>
 * @version v1.0
 * @date 2021/12/30 9:35
 */
@Mapper(componentModel = "spring")
public interface UserGroupConvert {

    /**
     * do 转 mysql实体对象
     *
     * @param userGroupDo do对象
     * @return com.bestcem.xm.user.group.entity.mongo.UserGroup
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/12/30 11:16
     */
    UserGroup doToMysql(UserGroupDO userGroupDo);

    /**
     * do列表 转 mysql实体对象列表
     *
     * @param userGroupDos do列表
     * @return java.util.List<com.bestcem.xm.user.group.entity.mongo.UserGroup>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/12/30 11:16
     */
    List<UserGroup> dosToMysqls(List<UserGroupDO> userGroupDos);

    /**
     * mongo实体对象 转 do
     *
     * @param userGroup mongo实体对象
     * @return com.bestcem.xm.user.group.entity.pojo.UserGroupDO
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/12/30 11:17
     */
    UserGroupDO mysqlToDo(UserGroup userGroup);

    /**
     * mongo实体对象列表 转 do列表
     *
     * @param userGroups mongo实体对象列表
     * @return java.util.List<com.bestcem.xm.user.group.entity.pojo.UserGroupDO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/12/30 11:18
     */
    List<UserGroupDO> mysqlsToDos(List<UserGroup> userGroups);

    /**
     * dto对象 转 do
     *
     * @param userGroupDTO dto对象
     * @return com.bestcem.xm.user.group.entity.pojo.UserGroupDO
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/12/30 11:18
     */
    UserGroupDO dtoToDo(UserGroupDTO userGroupDTO);

    /**
     * dto对象列表 转 do对象列表
     *
     * @param userGroupDtoS dto对象列表
     * @return java.util.List<com.bestcem.xm.user.group.entity.pojo.UserGroupDO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/12/30 11:19
     */
    List<UserGroupDO> dtosToDos(List<UserGroupDTO> userGroupDtoS);

    /**
     * do对象 转 dto对象
     *
     * @param userGroupDo dto对象
     * @return com.bestcem.xm.user.group.service.dto.group.UserGroupDTO
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/12/30 11:19
     */
    UserGroupDTO doToDto(UserGroupDO userGroupDo);

    /**
     * do对象列表 转 dto对象列表
     *
     * @param userGroupDos do对象列表
     * @return java.util.List<com.bestcem.xm.user.group.service.dto.group.UserGroupDTO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/12/30 11:20
     */
    List<UserGroupDTO> dosToDtos(List<UserGroupDO> userGroupDos);

    /**
     * dto对象转export dto
     *
     * @param groupDTO
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/1/4 13:50
     */
    UserGroupExportDTO dtoToExport(UserGroupDTO groupDTO);

    @Mapping(source = "version", target = "versionId")
    UserGroupDTO resumeVoToDto(UserGroupResumeVO resumeVO);

    /**
     * dto转voInfo
     *
     * @param dtos dtos
     * @return java.util.List<com.bestcem.xm.user.group.controller.vo.group.UserGroupInfoVO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/02/08 14:40
     */
    @Mapping(source = "versionId", target = "version")
    List<UserGroupInfoVO> dtosToInfoVos(List<UserGroupDTO> dtos);

    /**
     * dto转voInfo
     *
     * @param dto dto
     * @return java.util.List<com.bestcem.xm.user.group.controller.vo.group.UserGroupInfoVO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/02/08 14:40
     */
    @Mapping(source = "versionId", target = "version")
    UserGroupInfoVO dtoToInfoVo(UserGroupDTO dto);

    /**
     * createVO转UserGroupDTO
     *
     * @param createVO
     * @return com.bestcem.xm.user.group.service.dto.group.UserGroupDTO
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/2/10 11:35
     */
    UserGroupDTO createVoToDto(UserGroupCreateVO createVO);

    /**
     * MoveUserGroupVO转MoveUserGroupDTO
     *
     * @param groupVO 组织数据
     * @return com.bestcem.xm.user.service.dto.group.MoveUserGroupDTO
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/04/02 19:15
     */
    MoveUserGroupDTO moveGroupVO2Dto(MoveUserGroupVO groupVO);

    /**
     * UpdateUserGroupVO转UpdateUserGroupDTO
     *
     * @param groupVO 更新组织数据
     * @return com.bestcem.xm.user.service.dto.group.UpdateUserGroupDTO
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/04/02 19:15
     */
    UpdateUserGroupDTO updateGroupVO2Dto(UpdateUserGroupVO groupVO);

    /**
     * GroupsListRequestVo转GroupListRequestDto
     *
     * @param requestVO 查询指定状态下的用户组列表搜索条件
     * @return GroupsListRequestDTO
     * @author yanjishuo <jishuo.yan@idiaoyan.com>
     * @date 2022/04/02 19:15
     */
    GroupsListRequestDTO groupListRequestVoToGroupListRequestDto(GroupsListRequestVO requestVO);

    /**
     * userGroupDtos转ResumeDtos
     *
     * @param userGroupDos
     * @return List<UserGroupResumeDTO>
     * @author yanjishuo <jishuo.yan@idiaoyan.com>
     * @date 2022/04/02 19:15
     */
    List<UserGroupResumeDTO> dosToResumeDtos(List<UserGroupDO> userGroupDos);

    /**
     * resumeDtos转ResumeVos
     *
     * @param data
     * @return List<UserGroupsVO>
     * @author yanjishuo <jishuo.yan@idiaoyan.com>
     * @date 2022/04/02 19:15
     */
    List<UserGroupsVO> resumeDtosToResumeVos(List<UserGroupResumeDTO> data);

    /**
     * DTOs转换为VOs
     *
     * @param userGroupDTOS dtos
     * @return java.util.List<com.bestcem.xm.user.controller.vo.group.UserGroupVO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/06/08 17:36
     */
    List<UserGroupVO> dtosToVos(List<UserGroupDTO> userGroupDTOS);

    /**
     * DTO转换为CreateGroupResponseVO
     *
     * @param userGroup
     * @return com.bestcem.xm.user.controller.vo.group.CreateGroupResponseVO
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/6/23 17:00
     */
    @Mapping(source = "versionId", target = "version")
    CreateGroupResponseVO dtoToVo(UserGroupDTO userGroup);

    GroupInfoDTO dto2InfoDto(UserGroupDTO userGroup);

    GroupInfoVO infoDto2InfoVo(GroupInfoDTO groupInfoDTO);
}
